import csv
import random
import string
from datetime import datetime, timedelta
import pandas as pd


def generate_random_name():
    """生成随机姓名"""
    first_names = ['张', '李', '王', '刘', '陈', '杨', '赵', '黄', '周', '吴',
                   '徐', '孙', '胡', '朱', '高', '林', '何', '郭', '马', '罗']
    last_names = ['伟', '芳', '娜', '敏', '静', '丽', '强', '磊', '军', '洋',
                  '勇', '艳', '杰', '娟', '涛', '明', '超', '秀英', '霞', '平']
    return random.choice(first_names) + random.choice(last_names)


def generate_random_id_card():
    """生成随机身份证号"""
    # 地区码(1-999999)
    area_code = str(random.randint(100000, 999999))

    # 生日(1950-2005年)
    start_date = datetime(1950, 1, 1)
    end_date = datetime(2005, 12, 31)
    random_date = start_date + timedelta(
        seconds=random.randint(0, int((end_date - start_date).total_seconds()))
    )
    birth_date = random_date.strftime("%Y%m%d")

    # 顺序码(001-999)
    order_code = str(random.randint(1, 999)).zfill(3)

    # 校验码
    check_code = str(random.randint(0, 9))

    return area_code + birth_date + order_code + check_code


def generate_random_address():
    """生成随机地址"""
    provinces = ['北京市', '上海市', '广东省', '江苏省', '浙江省', '山东省', '河南省', '河北省', '四川省', '湖北省']
    cities = ['朝阳区', '浦东新区', '天河区', '鼓楼区', '西湖区', '历下区', '金水区', '长安区', '武侯区', '江岸区']
    streets = ['中山路', '解放路', '人民路', '建设路', '胜利路', '光明路', '和平路', '长江路', '黄河路', '泰山街']
    return f"{random.choice(provinces)}{random.choice(cities)}{random.choice(streets)}{random.randint(1, 999)}号"


def generate_random_phone():
    """生成随机手机号"""
    prefixes = ['130', '131', '132', '133', '134', '135', '136', '137', '138', '139',
                '150', '151', '152', '153', '155', '156', '157', '158', '159',
                '180', '181', '182', '183', '185', '186', '187', '188', '189']
    return random.choice(prefixes) + ''.join(random.choices(string.digits, k=8))


def generate_random_employee_id():
    """生成随机工号"""
    return f"EMP{random.randint(100000, 999999)}"


def generate_random_gender():
    """生成随机性别"""
    return random.choice(['男', '女'])


def generate_large_csv(filename, target_size_gb=1):
    """生成指定大小的CSV文件"""
    # CSV头部
    headers = ['工号', '姓名', '身份证', '地址', '性别', '手机号']

    # 估算每行数据大小（字节）
    sample_row = "EMP123456,张三,110101199001011234,北京市朝阳区中山路100号,男,13800138000"
    estimated_row_size = len(sample_row.encode('utf-8')) + 1  # +1 for newline

    # 计算需要的行数
    target_size_bytes = target_size_gb * 1024 * 1024 * 1024
    estimated_rows = target_size_bytes // estimated_row_size

    print(f"预计生成 {estimated_rows:,} 行数据...")

    # 写入CSV文件
    with open(filename, 'w', newline='', encoding='utf-8') as csvfile:
        writer = csv.writer(csvfile)
        # 写入头部
        writer.writerow(headers)

        # 写入数据行
        for i in range(estimated_rows):
            row = [
                generate_random_employee_id(),  # 工号
                generate_random_name(),  # 姓名
                generate_random_id_card(),  # 身份证
                generate_random_address(),  # 地址
                generate_random_gender(),  # 性别
                generate_random_phone()  # 手机号
            ]
            writer.writerow(row)

            # 每10万行显示进度
            if (i + 1) % 100000 == 0:
                print(f"已生成 {i + 1:,} 行数据")

    # 检查文件大小
    import os
    actual_size = os.path.getsize(filename)
    actual_size_gb = actual_size / (1024 ** 3)
    print(f"文件生成完成: {filename}")
    print(f"实际文件大小: {actual_size_gb:.2f} GB ({actual_size:,} 字节)")


# 生成1GB的CSV文件
if __name__ == "__main__":
    generate_large_csv("employee_data.csv", 1)
